﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Dominio;
using Log4Net;
//using System.Reflection;
using System.Web.Services;

namespace HotelGUI
{
    public partial class Checkout : Form
    {
        #region Variables
        int habitacionActual = 0;
        private ISistema sistema =  Dominio.Fabrica.getSistema();
        private ILog log = FactoryLogs.getLogInstance();
        //private Assembly assm;
        //private List<string> listaPaths;
        //private List<string> direccion;

        #endregion Variables

        public Checkout()
        {
            InitializeComponent();
        }

        private void Checkout_Load(object sender, EventArgs e)
        {

            cmbHabitaciones.Items.AddRange(sistema.traerNumeroDeHabitacionesOcupadas().ToArray());
            cmbExtras.Items.AddRange(sistema.traerExtras().ToArray());
        }


        private void button1_Click(object sender, EventArgs e)
        {
            if (cmbHabitaciones.SelectedItem.ToString() !="") //txtHabitacion.Text != "")
            {
                
                int hab = int.Parse(cmbHabitaciones.SelectedItem.ToString());//txtHabitacion.Text);
                dgvLineaFactura.Rows[0].Cells[0].Value = "Alojamiento " + sistema.calcularCantidadDeNoches(hab).ToString() + " Noches";
                dgvLineaFactura.Rows[0].Cells[1].Value = sistema.calcularAlojamiento(hab).ToString();
                int n;

                n = dgvLineaFactura.Rows.Add();

                dgvLineaFactura.Rows[n].Cells[0].Value = "Comodidades";
                dgvLineaFactura.Rows[n].Cells[1].Value = sistema.calcularCostoDeComodidadesDeUnaHabitacion(hab).ToString();



            }
        }

        private void btnFacturar_Click(object sender, EventArgs e)
        {


            List<String> conceptos = new List<string>();
            List<Double> montos = new List<double>();

            try
            {
               
                foreach (DataGridViewRow l in dgvLineaFactura.Rows)
                {
                    conceptos.Add((String)l.Cells[0].Value);
                    montos.Add(double.Parse(l.Cells[1].Value.ToString()));

                }

                if (sistema.facturar(conceptos.ToArray(), montos.ToArray(), txtCliente.Text.Trim(), DateTime.Now))
                {
                    MessageBox.Show("Sistema Facturacion: " + sistema.getSistemaActualFacturacion() + ". Factura regisrada correctamente");
                }
                else
                {
                    MessageBox.Show("Sistema Facturacion: " + sistema.getSistemaActualFacturacion() + ". ERROR al registrar la Factura en el SISTEMA");
                }

                log.info(sistema.obtenerIdUsuarioLogueado(), "CHECK OUT - Facturacion. IdCliente: " + txtCliente.Text.Trim());

                sistema.realizarCheckOut(habitacionActual);

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        private void btnAgregarItem_Click(object sender, EventArgs e)
        {
            int n=-10;
            try
            {
                

                n = dgvLineaFactura.Rows.Add();

                dgvLineaFactura.Rows[n].Cells[0].Value = cmbExtras.SelectedItem.ToString();
                dgvLineaFactura.Rows[n].Cells[1].Value = double.Parse(txtCostoExtra.Text);
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, "Debe agregar Extra." + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                if (n >= 0)
                    try
                    {
                        dgvLineaFactura.Rows.RemoveAt(n);
                    }
                    catch (Exception ex1)
                    {
                        MessageBox.Show(this, ex1.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
            }
        }

        private void cmbHabitaciones_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                habitacionActual = int.Parse(cmbHabitaciones.SelectedItem.ToString());
                txtCliente.Text = sistema.traerClienteDeUnaHabitacion(habitacionActual);
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}
